// 基础类型
// 返回函数的类型

// 返回函数类型
function example(){
    rerturn {a: 1, b: ''}
}
type FunctionType = ReturnType<typeof example>

// 手写record 创建一个对象类型，属性为t类型
type MyReord<K extends keyof any, T> = {
    [P in K]: T
}

// 手写pick  从T类型中选一组属性
type MyPick<T, K extends keyof T> = {
    [P in K]: T[P]
}

// 手写omit 从T类型中排出一组属性
type MyOmit<T, K extends keyof any> = Pick<T, Exclued<keyof T, K>> 

// 手写Exclude 从T中排出可以赋值给U的类型
type MyExclude<T, U> = T extends U ? never : T



// 手写 Partial 将所有类型可选
type MyPartial<T> = {
    [P in keyof T]?: T[P]
}

// 手写 Requierd 将所有类型必填
type MyRequired<T> = {
    [P in keyof T]-?: T[P]
}

// 手写 ReadOnly 所有属性变为Read
type MyReadOnly<T> = {
    ReadOnly [P in keyof T]: T[P]
}

